package routers

import (
	"gin-demo/middleware/cors"
	"gin-demo/middleware/jwt"
	"gin-demo/pkg/setting"
	"gin-demo/routers/api"
	v1 "gin-demo/routers/api/v1"
	"github.com/gin-gonic/gin"
	"net/http"
)

func InitRouter() *gin.Engine {
	r := gin.New()

	r.Use(gin.Logger())
	r.Use(gin.Recovery())
	// gin.SetMode(setting.RunMode)

	// 加载模板
	r.LoadHTMLGlob("templates/views/*")
	// router.LoadHTMLFiles("templates/template1.html", "templates/template2.html")
	// 加载静态文件
	r.Static("web", "templates/static")

	// 为单个文件绑定路由
	r.StaticFile("/favicon.ico", "templates/static/favicon.ico")

	// r.GET("/", func(c *gin.Context) {
	// 	// 睡眠5秒
	// 	// time.Sleep(5 * time.Second)
	// 	c.JSON(200, gin.H{
	// 		"message": "welcome come to gin demo project",
	// 	})
	//
	// })

	// chatgpt 聊天
	r.GET("/chat_robot", func(c *gin.Context) {
		c.HTML(http.StatusOK, "index.tmpl", gin.H{
			"title": "Main website",
			"host":  setting.ApiHost,
		})
	})

	// chatgpt 聊天(本地css和js资源)
	r.GET("/chat_robot_local", func(c *gin.Context) {
		c.HTML(http.StatusOK, "index_local_source.tmpl", gin.H{
			"title": "Main website",
			"host":  setting.ApiHost,
		})
	})

	// deepseek 聊天(本地css和js资源)
	r.GET("/deepseek_local", func(c *gin.Context) {
		c.HTML(http.StatusOK, "index_deepseek_local_source.tmpl", gin.H{
			"title": "DeepSeek Main website",
			"host":  setting.ApiHost,
		})
	})

	// 公司 聊天 机器人
	r.GET("/chat_com_robot", func(c *gin.Context) {
		c.HTML(http.StatusOK, "com_chat.tmpl", gin.H{
			"title": "聊天机器儿",
			"host":  setting.ApiHost,
		})
	})

	// 获取认证的token
	r.POST("/auth", api.GetAuth)

	// api v1版本分组
	apiv1 := r.Group("/api/v1").Use(cors.Cors())
	// 登录

	// TODO chatgpt35 的api
	apiv1.GET("/chat35Stream", v1.ChatGPT35StreamRequest)
	// TODO deepseek 的api
	//apiv1.GET("/deepseekstream", v1.DeepSeekStreamRequest)
	apiv1.GET("/deepseekstream", v1.DeepSeekStreamRequest4)
	apiv1.GET("/deepseekstream4", v1.DeepSeekStreamRequest4)

	// 添加认证中间件
	apiv1.Use(jwt.JWT()).Use(cors.Cors())
	{
		// chatgpt3 的api
		apiv1.GET("/chat3", v1.ChatGPT3Request)
		// chatgpt35 的api
		apiv1.GET("/chat35", v1.ChatGPT35Request)

		// --------------------------- 标签相关路由 ------------------------------
		// 获取标签列表
		apiv1.GET("/tags", v1.GetTags)
		// 新建标签
		apiv1.POST("/tags", v1.AddTags)
		// 更新指定标签
		apiv1.PUT("/tags/:id", v1.EditTags)
		// 删除标签
		apiv1.DELETE("/tags/:id", v1.DeleteTags)
		// --------------------------- 标签相关路由 ------------------------------

		// --------------------------- 文章相关路由 ------------------------------
		// 获取文章列表
		apiv1.GET("/articles", v1.GetArticles)
		// 获取指定文章
		apiv1.GET("/articles/:id", v1.GetArticle)
		// 新建文章
		apiv1.POST("/articles", v1.AddArticle)
		// 更新指定文章
		apiv1.PUT("/articles/:id", v1.EditArticle)
		// 删除指定文章
		apiv1.DELETE("/articles/:id", v1.DeleteArticle)
		// --------------------------- 文章相关路由 ------------------------------
	}

	return r
}
